package cn.ynrcb.personnelfile.sysadmin.dao;

import cn.ynrcb.personnelfile.admin.vo.ReceptorVo;
import cn.ynrcb.personnelfile.sysadmin.entity.SysUserEntity;
import cn.ynrcb.personnelfile.sysadmin.vo.UserListVo;
import cn.ynrcb.personnelfile.sysadmin.vo.UserVo;
import com.baomidou.mybatisplus.core.mapper.BaseMapper;
import com.baomidou.mybatisplus.extension.plugins.pagination.Page;
import org.apache.ibatis.annotations.Mapper;
import org.apache.ibatis.annotations.Param;
import org.apache.ibatis.annotations.Select;
import org.apache.ibatis.annotations.Update;

import java.util.List;
import java.util.Map;

/**
 * 系统用户
 */
@Mapper
public interface SysUserDao extends BaseMapper<SysUserEntity> {

    /**
     * 查询用户的所有权限
     */
    List<String> queryAllPerms(Long userId);

    /**
     * 查询用户的所有菜单ID
     */
    List<Long> queryAllMenuId(Long userId);

    /**
     * 机构用户分页查询
     */
    List<UserListVo> queryQyAdminUserPage(Page<UserListVo> page, @Param(value = "map") Map<String, Object> params);

    /**
     * 待审核用户分页查询
     */
    List<UserListVo> queryAuditUserPage(Page<UserListVo> page, @Param(value = "map") Map<String, Object> params);

    /**
     * 根据用户名获取用户信息
     *
     * @param username
     * @return
     * @author swb
     * @version created at 2020年8月10日 下午5:06:44
     */
    Map<String, String> getUserInfo(@Param(value = "username") String username);

    /**
     * 根据关键字查询通知接受者list
     *
     * @return
     */
    List<ReceptorVo> queryReceptors();

    /**
     * 根据用户名查询用户信息
     */
    @Select("SELECT u.user_id,u.role_id,u.username,u.`password`,u.salt,u.mobile,u.`status`,u.is_lock,u.miss_num,u.remark,r.role_name FROM sys_user AS u LEFT JOIN sys_role AS r ON u.role_id = r.role_id WHERE u.username = #{username} LIMIT 1 ")
    UserVo.UserLoginVo queryByUserName(String username);

    /**
     * 根据用户名来查找用户
     */
    @Select("SELECT * FROM sys_user WHERE username = #{username}")
    SysUserEntity getUserByUsername(String username);

    /**
     * 根据企业id来查找用户
     */
    @Select("SELECT * FROM sys_user AS u LEFT JOIN tb_enterprise AS e ON u.enterprise_id = e.id WHERE e.id = #{EnterpriseId}")
    SysUserEntity getUserByEnterpriseId(String EnterpriseId);

    /**
     * 将用户状态设置为5-退出系统
     *
     * @param userId
     */
    @Update("UPDATE sys_user SET `status` = 5,update_user_id = #{updateUserId},update_time = CURRENT_TIMESTAMP  WHERE user_id = #{userId}")
    Boolean deleteUser(Long userId, Integer updateUserId);

    List<SysUserEntity> querySysPage(Page<SysUserEntity> page, @Param(value = "map") Map<String, Object> params);

    UserVo.UserLoginVo queryAdminByUserName(String username);

    /**
     * 查找出绑定过手机号的，且在需要填写年报表的所有企业用户，参数可限制地区
     *
     * @return
     */
    List<SysUserEntity> findNeedEnterpriseInfoUser(@Param(value = "map") Map<String, Object> params);

    /**
     * 根据参数年份，查找出绑定过手机号的，且在参数年存在年报表的用户，参数可限制地区
     *
     * @param params
     * @return
     */
    List<SysUserEntity> findHaveEnterpriseInfoUser(@Param(value = "map") Map<String, Object> params);

//    /**
//     * 根据参数季度，查找出绑定过手机号的，且在参数季度存在季度报表的用户
//     *
//     * @param quarter（202101）
//     * @return
//     */
//    List<SysUserEntity> findHaveEnterpriseBusinessUser(String quarter);
//
//    /**
//     * 根据参数季度和用户绑定的电话来查找经营情况报表
//     *
//     * @param quarter（202101）
//     * @param mobile
//     * @return
//     */
//    List<SysUserEntity> findHaveEnterpriseBusinessUserByMobile(String quarter, String mobile);

    /**
     * 根据参数季度，查找出绑定过手机号的，且在参数月份存在展览项目报表的用户，参数可限制地区
     *
     * @param params
     * @return
     */
    List<SysUserEntity> findHaveProjectExhibitionUser(@Param(value = "map") Map<String, Object> params);

    /**
     * 根据参数季度和用户绑定的电话来查找展览项目表
     *
     * @param quarter（202101）
     * @param mobile
     * @return
     */
    List<SysUserEntity> findHaveProjectExhibitionUserByMobile(String quarter, String mobile);

    /**
     * 根据参数季度，查找出绑定过手机号的，且在参数月份存在会议项目报表的用户，参数可限制地区
     *
     * @param params
     * @return
     */
    List<SysUserEntity> findHaveProjectMeetingUser(@Param(value = "map") Map<String, Object> params);

    /**
     * 根据参数季度和用户绑定的电话来查找会议项目表
     *
     * @param quarter（202101）
     * @param mobile
     * @return
     */
    List<SysUserEntity> findHaveProjectMeetingUserByMobile(String quarter, String mobile);

    /**
     * 查找出绑定过手机号的，且在需要填写节庆项目报表的所有县区管理员用户，参数可限制地区
     *
     * @return
     */
    List<SysUserEntity> findNeedProjectFestivalUser(@Param(value = "map") Map<String, Object> params);

    /**
     * 根据参数季度，查找出绑定过手机号的，且在参数月份存在节庆项目报表的县区管理员用户，参数可限制地区
     *
     * @param params
     * @return
     */
    List<SysUserEntity> findHaveProjectFestivalUser(@Param(value = "map") Map<String, Object> params);

    /**
     * 根据参数季度和用户绑定的电话来查找节庆项目表
     *
     * @param quarter（202101）
     * @param mobile
     * @return
     */
    List<SysUserEntity> findHaveProjectFestivalUserByMobile(String quarter, String mobile);

    /**
     * 根据统一社会信用代码查询数据
     *
     * @param creditCode
     * @return
     */
    @Select("select * from sys_user where credit_code = #{creditCode} limit 1")
    SysUserEntity getByCreditCode(String creditCode);

    /**
     * 根据手机号获取审核不通过用户
     * @param mobile
     * @return
     */
    @Select("select * from sys_user where mobile = #{mobile} AND audit_status = 4")
    SysUserEntity getNoPassUserByMobile(String mobile);
}
